/**
 * 给定集合nums,返回所有子集（包括空集）
 * @param {number[]} nums 
 */
// 回溯法
var subsets = function (nums) {
    const result = []

    function backTrack(start, curr) {
        // 把curr加入result数组
        result.push([...curr])
        for (let i = start; i < nums.length; i++) {
            curr.push(nums[i])
            backTrack(i + 1, curr)
            // 把curr最后一个元素移除
            curr.pop()
        }
    }

    backTrack(0, [])
    return result
}